package fr.grobim.hangovers.gestionBudget.services.factures;

import java.util.List;

import org.hibernate.exception.ConstraintViolationException;

import fr.grobim.hangovers.gestionBudget.beans.factures.Facture;
import fr.grobim.hangovers.gestionBudget.beans.factures.ReglementFacture;
import fr.grobim.hangovers.gestionBudget.beans.factures.SourceFacture;

public interface FacturationService {
	
	public Facture obtenirFacture(Integer id);
	
	public Facture obtenirFacture(Facture facture);
	
	public Facture obtenirFactureAvecReglements(Integer id);
	
	public Facture obtenirFactureAvecReglements(Facture facture);
	
	public SourceFacture obtenirSourceFacture(Integer id);
	
	public SourceFacture obtenirSourceFacture(SourceFacture sourceFacture);
	
	public ReglementFacture obtenirReglement(Integer id);
	
	public ReglementFacture obtenirReglement(ReglementFacture reglementFacture);
	
	public List<Facture> listerToutesFactures();
	
	public List<SourceFacture> listerToutesSourcesFacture();
	
	public void ajouterOuModifierFacture(Facture facture);
	
	public void ajouterOuModifierSourceFacture(SourceFacture sourceFacture) throws ConstraintViolationException;
	
	public void ajouterOuModifierReglement(ReglementFacture reglementFacture);
	
	public void supprimerFacture(Integer id);
	
	public void supprimerFacture(Facture facture);
	
	public void supprimerSourceFacture(Integer id);
	
	public void supprimerSourceFacture(SourceFacture sourceFacture);
	
	public void supprimerReglementFacture(Integer id);
	
	public void supprimerReglementFacture(ReglementFacture reglementFacture);
	
	public List<ReglementFacture> listerTousReglementsParFacture(Integer id);
	
	public List<ReglementFacture> listerTousReglementsParFacture(Facture facture);
	
	public List<ReglementFacture> listerTousReglementsParFacture(Integer id, Integer maxResultats);
	
	public List<ReglementFacture> listerTousReglementsParFacture(Facture facture, Integer maxResultats);
	
	public void reglerFacture(ReglementFacture reglementFacture);

}
